package com.xhu.collegestudentrentalsystem.util;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author zhu huilin
 * @date 2023/3/5 14:54
 *  文件操作工具类
 */
public class FileUtils {

    /**
     * 实现文件上传，并将多个文件名以JSON格式返回
     * @param files     文件对象
     * @param realPath  上传真实路径
     * @return
     */
    public static String uploadFile(MultipartFile[] files, String realPath) throws IOException {
        String[] filenames = new String[files.length];
        // 1. 保存位置
        File file = new File(realPath);
        if(!file.exists()) {
            file.mkdir();
        }
        int i = 0;

        // 2. 遍历文件
        for(MultipartFile multipartFile : files) {
            // 2.1 获取原始名字的后缀，得到文件类型，实际上传的文件名重新生成
            String filename = multipartFile.getOriginalFilename();
            if(filename.isEmpty() || "".equals(filename)){
                continue;
            }
            String suffix = filename.substring(filename.lastIndexOf("."));
            String newFilename = UUID.randomUUID().toString() + suffix;
            // 2.2 将文件名存入数组，最后以JSON格式返回
            filenames[i++] = newFilename;
            // 2.3 上传文件
            File file1 = new File(realPath + File.separator + newFilename);
            multipartFile.transferTo(file1);
        }
        return JSONUtil.toJsonStr(filenames);
    }

    /**
     * 单文件上传
     */
    public static String uploadOneFile(MultipartFile file, String realPath) throws IOException {
        // 1. 保存位置
        File file1 = new File(realPath);
        if(!file1.exists()) {
            file1.mkdir();
        }

        // 2. 获取文件名，并截取后缀，给文件生成一个新的名字，防止重复导致覆盖
        String filename = file.getOriginalFilename();
        if(filename == null || "".equals(filename)){
            return null;
        }
        String suffix = filename.substring(filename.lastIndexOf("."));
        String newFilename = UUID.randomUUID().toString() + suffix;

        // 3. 创建文件对象，上传文件
        File file2 = new File(realPath + File.separator + newFilename);
        file.transferTo(file2);
        return newFilename;
    }


}
